 
 
 
 
 
 
 
 


// ---------------------------------------
// Template GA: fk.cs	rel: 3.0.1.0 NoDal
// ---------------------------------------
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using System.Text;
using System.Globalization;
using IGCal.GA;
using IGCal.Funzioni;
using IGCal.GA.BaseObjects;

namespace Calcio.DefaultDirigenti
{
	/// <summary>
	/// Controllo fk fkDefaultDirigenti
	/// </summary>
	public partial class fkDefaultDirigenti : fkBase, IContentSerializable // , IGCal.Windows.Security.IID  ********* Scommentare per la security *********
	{
		// Indica se la decodifica attraverso la chiave deve essere fatta a parte
		private bool _DecodificaIDAParte = false;

		// Numero dei campi chiave
		private const int _NumeroCampiChiave = 3;

		// Campi chiave da ritornare come proprieta'
		private object _IDDirigente = DBNull.Value;
		private object _IDRuoloDirigenteInGara = DBNull.Value;
		private object _Casa = DBNull.Value;

		// Campi da ritornare come proprieta'

		/// <summary>
		/// Costruttore della classe/controllo fk
		/// </summary>
		public fkDefaultDirigenti()
		{
			// This call is required by the Windows Form Designer.
			InitializeComponent();

			// Add any initialization after the InitializeComponent call
			Initialize();
		}

		#region Proprieta' del controllo FK

		/// <summary>
		/// IDDirigente
		/// </summary>
		[System.ComponentModel.Browsable(false), System.ComponentModel.DesignerSerializationVisibilityAttribute(0)]
		public object IDDirigente
		{
			get
			{
				// Eseguo la decodifica

				// Ritorno il valore della proprieta'
				try
				{
					return Convert.ToInt32(_IDDirigente);
				}
				catch
				{
					return DBNull.Value;
				}
			}
			set
			{
				Text = string.Empty;

				// Controllo se mi e' stato passato un valore nullo
				if (value == DBNull.Value)
					_IDDirigente = DBNull.Value;
				else
				{
					try
					{
						_IDDirigente = Convert.ToInt32(value);
					}
					catch
					{
						_IDDirigente = DBNull.Value;
					}
					_IDRuoloDirigenteInGara = null;
					_Casa = null;
				}
				
				_NotChanged = false;

			}
		}
		/// <summary>
		/// IDRuoloDirigenteInGara
		/// </summary>
		[System.ComponentModel.Browsable(false), System.ComponentModel.DesignerSerializationVisibilityAttribute(0)]
		public object IDRuoloDirigenteInGara
		{
			get
			{
				// Eseguo la decodifica

				// Ritorno il valore della proprieta'
				try
				{
					return Convert.ToInt32(_IDRuoloDirigenteInGara);
				}
				catch
				{
					return DBNull.Value;
				}
			}
			set
			{
				Text = string.Empty;

				// Controllo se mi e' stato passato un valore nullo
				if (value == DBNull.Value)
					_IDRuoloDirigenteInGara = DBNull.Value;
				else
				{
					try
					{
						_IDRuoloDirigenteInGara = Convert.ToInt32(value);
					}
					catch
					{
						_IDRuoloDirigenteInGara = DBNull.Value;
					}
					_Casa = null;
				}
				
				_NotChanged = false;

			}
		}
		/// <summary>
		/// Casa
		/// </summary>
		[System.ComponentModel.Browsable(false), System.ComponentModel.DesignerSerializationVisibilityAttribute(0)]
		public object Casa
		{
			get
			{
				// Eseguo la decodifica
				Decodifica(true);

				// Ritorno il valore della proprieta'
				if (_Casa == DBNull.Value)
					return DBNull.Value;					
				else
					return (string)_Casa;

			}
			set
			{
				Text = string.Empty;

				// Controllo se mi e' stato passato un valore nullo
				if (value == DBNull.Value)
					_Casa = DBNull.Value;
				else
				{
					_Casa = value.ToString().Trim();

					Text += "\\" + _IDDirigente.ToString();

					Text += "\\" + _IDRuoloDirigenteInGara.ToString();

					Text += "\\" + _Casa.ToString();
					Text = Text.Substring(1);
				}
				
				_NotChanged = false;

				Decodifica(true);
			}
		}

		#endregion


		#region Funzioni e metodi

		/// <summary>
		/// Procedura di inizializzazione di alcune proprieta' del controllo (chiamata dal costruttore)
		/// </summary>
		new private void Initialize()
		{
			base.Initialize();

			// Inizializzo i campi da visualizzare nel tool tip
			ToolTipFieldsName = "";
			ToolTipFields = "";		
		}

		/// <summary>
		/// Si occupa di vuotare le variabili destinate a contenere i valore delle proprieta' del controllo
		/// </summary>
		protected override void VuotaVariabiliProprieta()
		{
			_IDDirigente = DBNull.Value;
			_IDRuoloDirigenteInGara = DBNull.Value;
			_Casa = DBNull.Value;

			base.VuotaComboExtended();

			base.AgganciaToolTip();
		}

		/// <summary>
		/// Overload di Decodifica
		/// </summary>
		/// <param name="raiseEventChange"></param>
		protected override void Decodifica(bool raiseEventChange)
		{
			this.Decodifica(raiseEventChange, true);
		}

		/// <summary>
		/// Si occupa di tentare la decodifica di cio' che e' stato scritto all'interno del campo testo del controllo.
		/// Prima prova a decodificare sul/i campo/i chiave. Se non riesce a decodificare null tenta su altri campi.
		/// </summary>
		/// <param name="raiseEventChange">In base al valore di questo parametro viene generato oppure no l'evento OnChange quando il valore inserito
		/// nel campo testo ha dato luogo ad una decodifica (terminata con un valore Null oppure no) diversa da quella precedente.</param>
		/// <param name="impostaErrorProvider">In base al valore di questo parametro, l'Extender ErrorProvide deve essere impostato oppure no dopo un
		/// tentativo di decodifica che ha dato un risultato Null.</param>
		protected override void Decodifica(bool raiseEventChange, bool impostaErrorProvider)
		{
			IDataReader rs;
			string SQLWhere;
			string[] laCampiChiave;
			string lsRicerca;
			bool ChiaveVuota;

			// Deve esserci una connessione
			if (Globals.Connection == null)
				return;
			
			// Controllo se qualcosa e' cambiato
			if (_NotChanged)
				return; // Non e' cambiato niente

			// Imposto l'error provider a vuoto
			VisualizzaErroreDecodifica();

			// Tolgo gli spazi
			Text = Text.Trim();

			// Controllo che la text box non sia vuota
			if (Text == string.Empty)
			{
				VuotaVariabiliProprieta();
				_NotChanged = true;

				if (raiseEventChange)
					OnChange(this, new EventArgs());

				return;
			}

			// Se la proprieta' DecodificaIDAParte e' a True allora salta questa sezione di codice
			if (!_DecodificaIDAParte)
			{
				lsRicerca = string.Empty;

				// Controllo se esiste qualcosa che assomiglia ad un ID
				if (Text.IndexOf(" -") > 0)
					lsRicerca = Text.Substring(0, Text.IndexOf(" -")).Trim();
			
				// L'ID e' tutta la stringa
				if (lsRicerca == string.Empty)
					lsRicerca = Text;

				// Controllo se il numero dei campi chiave inserito e' esatto e se alcuni di loro sono vuoti
				laCampiChiave = lsRicerca.Split('\\');
				ChiaveVuota = false;
				for (int lnI = 0; lnI <= laCampiChiave.GetUpperBound(0); lnI++)
				{
					if (laCampiChiave[lnI].Trim() == string.Empty)
						ChiaveVuota = true;
				}
			
				if ((laCampiChiave.GetUpperBound(0) == _NumeroCampiChiave - 1) & !ChiaveVuota)
				{
					SQLWhere = string.Empty;
					try
					{
						SQLWhere += "    IDDirigente = " + String.Format("{0:0}", Convert.ToInt32(laCampiChiave[0])) + " And ";
						SQLWhere += "    IDRuoloDirigenteInGara = " + String.Format("{0:0}", Convert.ToInt32(laCampiChiave[1])) + " And ";
						SQLWhere += "    Casa = '" + General.RaddoppiaVirgolette(laCampiChiave[2]) + "' And ";
					}
					catch
					{
						SQLWhere += "    1 = 2 And ";
					}
					SQLWhere = SQLWhere.Substring(1, SQLWhere.Length - 5);

					rs = RecuperaRecord(SQLWhere);
				
					// Controllo se ho trovato qualcosa
					if (rs.Read())
					{
						// Imposto le variabili
						ImpostaProprieta(rs);

						// Completo il contenuto di Text
						ImpostaContenuto(rs);

						rs.Close();

						_NotChanged = true;
					
						if (raiseEventChange)
							OnChange(this, new EventArgs());
					
						return;
					}

					rs.Close();
				}
			}

			// Il numero dei campi chiave non corrisponde, oppure non ho trovato nulla con la ricerca per chiave
			// Ricerco per altri campi
			lsRicerca = string.Empty;
			if (lsRicerca == string.Empty)
				lsRicerca = Text;


			// Non ho trovato niente
			VuotaVariabiliProprieta();

			// Se richiesto aggiunge il segnale per indicare che non e' riuscito a decodificare
			if (impostaErrorProvider)
				VisualizzaErroreDecodifica(true); // Imposto l'error provider con l'errore

			if (raiseEventChange)
			{
				// Imposto a true _NotChanged per evitare che una eventuale intercettazione di Change su un form, impostando o valutando il
				// valore di una proprieta' dell'fk mi metta in una situazione di loop.
				_NotChanged = true;

				OnChange(this, new EventArgs());
			}

			_NotChanged = false;
		}

		/// <summary>
		/// Recupera il record cercato
		/// </summary>
		/// <param name="SQLWhere">Condizione da usare in uno statement Where</param>
		/// <returns>Un DataReader contenente i/il record recuperati/o</returns>
		protected override IDataReader RecuperaRecord(string SQLWhere)
		{
			string SQL = string.Empty;
		
			SQL += "Select ";
			SQL += "    * ";
			SQL += "From ";
			SQL += "    DefaultDirigenti ";
			SQL += "Where ";
			SQL += SQLWhere;

			// Creo la struttura del reader del set dei risultati
			return Globals.Connection.CreateCommand(SQL).ExecuteReader();
		}

		/// <summary>
		/// Imposta le variabili visualizzate nel Tooltip
		/// </summary>
		/// <param name="rs">Record corrente</param>
		protected void ImpostaProprieta(IDataReader rs)
		{
			// Imposto le variabili _ tramite il recordset parametro
			// Campi chiave:
			_IDDirigente = Convert.ToInt32(rs["IDDirigente"]);
			_IDRuoloDirigenteInGara = Convert.ToInt32(rs["IDRuoloDirigenteInGara"]);
			_Casa = (rs["Casa"]).ToString().Trim();

			// Campi da ritornare come proprieta'

			ImpostaToolTip(rs);
		}

		/// <summary>
		/// Imposta il valore di decodifica a video
		/// </summary>
		/// <param name="rs">Record decodificato</param>
		protected override string RecuperaTesto(System.Data.IDataReader rs)
		{
			string Testo = string.Empty;

			// Imposto Text tramite il recordset parametro
			// Parte della chiave
			Testo += "\\" + General.DBToString(rs["IDDirigente"].ToString());
			Testo += "\\" + General.DBToString(rs["IDRuoloDirigenteInGara"].ToString());
			Testo += "\\" + General.DBToString(rs["Casa"].ToString());
			Testo += " - ";

			// Parte dei dati

			return Testo.Substring(1);
		}

		#endregion


		#region Eventi dei controlli contenuti nello User Control

		/// <summary>
		/// Click del bottone di ricerca
		/// </summary>
		/// <param name="sender">Oggetto inviante l'evento</param>
		/// <param name="e">Argomenti standard dell'evento</param>
		protected override void btnRicerca_Click(object sender, EventArgs e)
		{
			object lsIDDirigente = null;
			object lsIDRuoloDirigenteInGara = null;
			object lsCasa = null;
			frmDefaultDirigentiRicerca frm = new frmDefaultDirigentiRicerca();

			if (frm.Start(ref lsIDDirigente, ref lsIDRuoloDirigenteInGara, ref lsCasa))
			{
				// Se non ho annullato imposto i campi di ID
				if (lsIDDirigente == null && lsIDRuoloDirigenteInGara == null && lsCasa == null)
					Text = string.Empty;
				else
					Text = lsIDDirigente.ToString().Trim() + "\\" + lsIDRuoloDirigenteInGara.ToString().Trim() + "\\" + lsCasa.ToString().Trim();

				// Per evitare che l'evento TextChanged venga rilanciato 2 volte
				base.LegameEventoATextBox(false);				

				Decodifica(true);

				// Ripristino la situazione
				base.LegameEventoATextBox(true);				

				// Posiziono il cursore nel controllo che contiene il testo
				Focus();
			}
		}

		/// <summary>
		/// Click del bottone di modifica
		/// </summary>
		/// <param name="sender">Oggetto inviante l'evento</param>
		/// <param name="e">Argomenti standard dell'evento</param>
		protected override void btnModifica_Click(object sender, EventArgs e)
		{
			frmDefaultDirigentiModifica frm = new frmDefaultDirigentiModifica();

			frm.Start(this, _IDDirigente, _IDRuoloDirigenteInGara, _Casa);
		}

		#endregion


		#region IContentSerializable Members

		/// <summary>
		/// Deserializza ed assegna i valori alle proprieta' che rappresentano i campi chiave della tabella
		/// </summary>
		/// <param name="content">La stringa da deserializzare</param>
		public void DeSerializeContent(string content)
		{
			// Se la stringa da deserializzare e' vuota o null esco senza far nulla
			if (string.IsNullOrEmpty(content.Trim()))
				return;

			string[] keys = content.Split('~');

			// Se il numero dei campi chiave e' diverso dalla dimensione dell'array appena creato non faccio nulla
			if (keys.Length != _NumeroCampiChiave)
				return;

			// Assegno ad ogni proprieta' chiave il relativo valore
			if (keys[0] == string.Empty)
				IDDirigente = DBNull.Value;
			else
				IDDirigente = Convert.ToInt32(keys[0], CultureInfo.InvariantCulture.NumberFormat);
			if (keys[1] == string.Empty)
				IDRuoloDirigenteInGara = DBNull.Value;
			else
				IDRuoloDirigenteInGara = Convert.ToInt32(keys[1], CultureInfo.InvariantCulture.NumberFormat);
			if (keys[2] == string.Empty)
				Casa = DBNull.Value;
			else
				Casa = keys[2];
		}

		/// <summary>
		/// Serializza i valori delle proprieta che rappresentano i campi chiave della tabella
		/// </summary>
		/// <returns>La stringa con i valori delle proprieta' serializzate</returns>
		public string SerializeContent()
		{
			string returnValue = string.Empty;

			// Preparo la stringa da serializzare
			returnValue += (_IDDirigente == null || _IDDirigente == DBNull.Value) ? "~" : "~" + ((int)_IDDirigente).ToString(CultureInfo.InvariantCulture.NumberFormat);
			returnValue += (_IDRuoloDirigenteInGara == null || _IDRuoloDirigenteInGara == DBNull.Value) ? "~" : "~" + ((int)_IDRuoloDirigenteInGara).ToString(CultureInfo.InvariantCulture.NumberFormat);
			returnValue += (_Casa == null || _Casa == DBNull.Value) ? "~" : "~" + _Casa.ToString();

			return returnValue.Substring(1);
		}

		#endregion
		
		// ********************** Per la security *******************
		
		// #region IID Members
		// /// <summary>
		// /// Tipo del campo chiave
		// /// </summary>
		// public IGCal.Security.IDType IDType
		// {
		//   get
		//   {
		//  	return IGCal.Security.IDType.Number; // Indicare qui il tipo del campo chiave
		//   }
		// }
		// #endregion

		// ************************************************************

	}
}

